[iOS] SendBirdでメッセージや画像をタイムラインに貼る!
はじめに
こんにちは。最近は朝のコーヒーが欠かせない田宮です。今朝は追加でコンソメスープを飲んできました。 さて、この前書いた記事では、iOSのサンプルプロジェクトをつくって、SDK を導入し、SendBird 公式サンプルからいろいろコピーしてきて、SendBirdのオープンチャット画面を実現するところまでやりました。
[iOS] SendBirdを使ってみた! | Developers.IO
今回は、API Document を見ながら、いろいろ動かしてみたいと思います。
3つ試してみた
1.チャットに書き込む
SendBird.sendMessage("test from code")
これでチャットにメッセージを書き込めます。
override func viewDidAppear(animated: Bool) { self.startSendBird() let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(3 * Double(NSEC_PER_SEC))) dispatch_after(delayTime, dispatch_get_main_queue()) { () -> Void in let formatter = NSDateFormatter() formatter.dateFormat = "HH:mm" let now = NSDate() let message = formatter.stringFromDate(now) + "入室しました ノシ" SendBird.sendMessage("\(message)") } }
前回の記事のコードに追記してきます。 オープンチャット画面に遷移したタイミングで、こんなふうに書いておくと、チャット部屋に入室したことを自動的に書き込まなくてもOKな仕 組みを簡単に提供出来るかと思います。
機能を実装した様子はこちらです。
2.写真をアップロードする
// UIImageをNSDataに変換 let imageFileData = UIImagePNGRepresentation(UIImage(named: imageName)!) // 画像データをアップロード SendBird.uploadFile(imageFileData, type: "image/png", hasSizeOfFile:UInt(imageFileData!.length), withCustomField: "") { (fileInfo:SendBirdFileInfo!, error:NSError!) -> Void in }
ファイル SendBird が用意している外部サーバにアップロードされます。 この時点では、アップロードされるのみで、タイムライン上に画像は表示されません。
3. 写真ファイルをタイムラインに貼る
let imageFileData = UIImagePNGRepresentation(UIImage(named: imageName)!) SendBird.uploadFile(imageFileData, type: "image/png", hasSizeOfFile:UInt(imageFileData!.length), withCustomField: "") { (fileInfo:SendBirdFileInfo!, error:NSError!) -> Void in //画像データをアップロード後返ってくる fileInfo を、後述の sendFileUrl() に渡す self.sendFileUrl(fileInfo.url, name: fileInfo.name, type: fileInfo.type, sizeOfFile: fileInfo.size, customField: "") }
(1)でファイルアップロード後に得られるファイル情報を、以下のsendFileUrl()に渡します。
func sendFileUrl(url: String, name: String, type: String, sizeOfFile: UInt, customField: String) { let fileInfo: SendBirdFileInfo = SendBirdFileInfo.init(url: url, name: name, type: type, size: sizeOfFile, customField: customField) SendBird.sendFile(fileInfo) }
ファイルのURLや各種情報を受け取り、画像をタイムラインに貼ります。
応用例
internal func uploadAppropriateImages() { let formatter = NSDateFormatter() formatter.dateFormat = "HH" let now = NSDate() let hour = Int(formatter.stringFromDate(now)) var imageName = "" if hour > 18 || hour < 6 { // 18時から6時は夜の画像 imageName = "night" } else if hour < 9 { // 6時から9時は朝の画像 imageName = "morning" } else { imageName = "day" // それ以外は昼の画像 } let imageFileData = UIImagePNGRepresentation(UIImage(named: imageName)!) SendBird.uploadFile(imageFileData, type: "image/png", hasSizeOfFile:UInt(imageFileData!.length), withCustomField: "") { (fileInfo:SendBirdFileInfo!, error:NSError!) -> Void in self.sendFileUrl(fileInfo.url, name: fileInfo.name, type: fileInfo.type, sizeOfFile: fileInfo.size, customField: "") } } internal func sendFileUrl(url: String, name: String, type: String, sizeOfFile: UInt, customField: String) { let fileInfo: SendBirdFileInfo = SendBirdFileInfo.init(url: url, name: name, type: type, size: sizeOfFile, customField: customField) SendBird.sendFile(fileInfo) }
ルームに入室した時間帯によって、イメージ画像をタイムラインに貼るコードがこちらです。
uploadAppropriateImages()を、ひとまずviewDidAppear()の中から呼ぶと良いでしょう。
このようになります。
おまけ
ちなみに、画像のURLを確認してみますと、どうやら AWS の S3 にアップされているようですね。
まとめ
今回は、どのようにしてメッセージや画像をタイムラインに貼る事ができるかを見てきました。 次回は、複数端末間でチャットしている様子と、Tipsなどをお伝えできればと思います。